package br.com.ff.veiculo.entidade;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.ff.cliente.entidade.Cliente;
import br.com.ff.common.StatusEnum;
import br.com.ff.tipoveiculo.entidade.TipoVeiculo;
import br.com.ff.veiculo.to.VeiculoTO;

@Entity
@Table(name="veiculo")
@NamedQueries({
	@NamedQuery(
		name="findVeiculoPorSerial",
		query="SELECT v FROM Veiculo v "
			+ "WHERE v.equipamentoSrn = :pSerial"				
	)
})
public class Veiculo implements Serializable {

	private static final long serialVersionUID = -7204969906025628979L;

	@Id
	@Column(name="VEI_ID")
	private Long id;
	
	@Column(name="VEI_COD")
	private String placa;
	
	@Column(name="VEI_DSC")
	private String descricao;
	
	@OneToOne
	@JoinColumn(name="CLI_ID", referencedColumnName="CLI_ID")
	private Cliente cliente;
	
	@OneToOne
	@JoinColumn(name="TPV_ID", referencedColumnName="TPV_ID")
	private TipoVeiculo tipoVeiculo;
	
	@Column(name="EQP_SRN")
	private String equipamentoSrn;
	
	@Column(name="VEI_DHC")
	@Temporal(TemporalType.DATE)
	private Date dataCadastro;
	
	@Column(name="VEI_ST")
	private int status;
	
	public Veiculo() {}
	
	public Veiculo(VeiculoTO veiculoTO) {
		if (veiculoTO.getCliente() != null) {
			this.cliente = new Cliente(veiculoTO.getCliente());
		}
		if (veiculoTO.getTipoVeiculo() != null) {
			this.tipoVeiculo = new TipoVeiculo(veiculoTO.getTipoVeiculo());
		}
		this.dataCadastro = veiculoTO.getDataCadastro();
		this.descricao = veiculoTO.getDescricao();
		this.equipamentoSrn = veiculoTO.getEquipamentoSrn();
		this.placa = veiculoTO.getPlaca();
		if (veiculoTO.getStatus() != null) { 
			this.status = veiculoTO.getStatus().getStatus();
		}
		this.id = veiculoTO.getId();
	}

	public VeiculoTO parseVeiculoTO() {
		VeiculoTO veiculoTO = new VeiculoTO();
		veiculoTO.setId(this.id);
		veiculoTO.setDataCadastro(this.dataCadastro);
		veiculoTO.setCliente(this.cliente.parseClienteTO());
		veiculoTO.setEquipamentoSrn(this.equipamentoSrn);
		veiculoTO.setTipoVeiculo(this.tipoVeiculo.parseTipoVeiculoTO());
		veiculoTO.setDescricao(this.descricao);
		veiculoTO.setPlaca(this.placa);
		
		if (getStatus() == StatusEnum.ATIVO.getStatus()) {
			veiculoTO.setStatus(StatusEnum.ATIVO);
		} else {
			veiculoTO.setStatus(StatusEnum.INATIVO);
		}
		return veiculoTO;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getPlaca() {
		return placa;
	}

	public void setPlaca(String placa) {
		this.placa = placa;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public TipoVeiculo getTipoVeiculo() {
		return tipoVeiculo;
	}

	public void setTipoVeiculo(TipoVeiculo tipoVeiculo) {
		this.tipoVeiculo = tipoVeiculo;
	}

	public String getEquipamentoSrn() {
		return equipamentoSrn;
	}

	public void setEquipamentoSrn(String equipamentoSrn) {
		this.equipamentoSrn = equipamentoSrn;
	}

	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public int getStatus() {
		return status;
	}

	public void setStatus(int status) {
		this.status = status;
	}
	
	
	
}
